package com.web.kdl.pojo.Vo;

import com.web.kdl.entity.flywheelDataAnalysis.FlywheelDataAnalysis;
import com.web.kdl.pojo.dto.FlywheelMainDto;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Author： shulibin
 * @Date： 2025/7/31 9:07
 * @Describe：以下为系统信息
 */
@Data
public class SystemBaseVo {
    // 系统状态 0-正常 1-故障
    private String status;

    // 系统容量 单位：kwh
    private String capacity;

    // 累计充电量 单位：kwh
    private String charge;

    // 累计放电量 单位：kwh
    private String discharge;

    public void addDto(List<FlywheelDataAnalysis> dataDto) {
        // 初始化累计值（从当前对象的值解析）
        double capacitySum = parseValue(this.capacity);
        double chargeSum = parseValue(this.charge);
        double dischargeSum = parseValue(this.discharge);

        // 累加新值
        for (FlywheelDataAnalysis dto : dataDto) {
            try {
                double value = dto.getDataValue();
                switch (dto.getDeviceName()) {
                    case "系统容量":
                        capacitySum += value;
                        break;
                    case "总充电量":
                        chargeSum += value;
                        break;
                    case "总放电量":
                        dischargeSum += value;
                        break;
                }
            } catch (NumberFormatException e) {
                System.err.println("Invalid number format for device: " + dto.getDeviceName() +
                        ", value: " + dto.getDataValue());
            }
        }

        // 更新对象的值（保留原有值的基础上累加）
        this.capacity = formatValue(capacitySum) + "kwh";
        this.charge = formatValue(chargeSum) + "kwh";
        this.discharge = formatValue(dischargeSum) + "kwh";
    }

    // 从字符串中解析出数值（去除单位）
    private double parseValue(String valueWithUnit) {
        if (valueWithUnit == null || valueWithUnit.isEmpty()) {
            return 0.0;
        }
        try {
            // 去除"kwh"单位
            String numericPart = valueWithUnit.replace("kwh", "").trim();
            return Double.parseDouble(numericPart);
        } catch (NumberFormatException e) {
            return 0.0; // 解析失败返回0
        }
    }

    // 格式化数值，保留两位小数
    private String formatValue(double value) {
        return String.format("%.2f", value);
    }
}